- 定义
const
成员函数时,const
位于参数
与函数体
之间 const
成员函数只能调用const
成员函数,保证不做修改禁用默认函数
(构造,赋值构造等),将默认函数私有化
privateconst
成员变量只能参数列表初始化
- 成员函数内部
static
变量为所有调用该成员函数的对象共有
this
指针不用于static 成员函数
中,不能指向const 对象
- 隐藏的父类成员,子类不可直接调用,通过父类共有函数调用
派生类同名成员或者函数 屏蔽父类同名成员或者函数
- 为
基类设置默认构造函数
,方便子类继承 - 基类声明虚函数后,
子类同名
自动定义为虚函数
- 构造函数
不可以是虚成员函数
,析构函数
可以 重载
在编译时期绑定
,虚函数(多态)
运行期间绑定
覆盖
:多态虚函数函数签名相同,遮蔽
: 共享函数名但签名不同抽象基类确保派生类必须定义某些特定函数(纯虚函数)
,否则派生类不可以实例化- 抽象基类:
包含一个纯虚函数 virtual =0;
抽象基类不可实例化
,可派生,其派生类必须覆盖全部纯虚函数
才可被实例化重载不改变符号优先级
- 除
new new[] delete delete[]
外以顶层函数重载操作符必须包含一个类对象 - 操作符
[] () ->
必须以类成员形式重载
- 以成员函数重载二元操作符,只需一个参数,而以顶层函数重载二元操作符时必须两个参数
- 使用
顶层函数重载非对象操作数可出现在操作符左边
,类成员函数重载
时第一个操作数必须是类对象
-praivete member
only access bymenberfunction and friend funtion.
protect member
can be accessed bymenber funtion
,friend function
andmember function of derived class
- using
friend function
only
inoverloading operator
as possible as we can - 前置自增: operator++() 后置自增: operator++(int );
new new[]
return type
must bevoid*
, the first parameter must besize_t
delete delete[]
return type must bevoid*
, the first parameter must bevoid *
wihch point to the object need to destroied对象不能属于模板类,只能属于模板类实例
duque :双端插入删除效率一致,vector 尾部插入删除效率高
protect
成员只能被该类和子类的方法访问
- 父类成员必须定义默认构造函数,否则子类构造前出现编译错误
- 同一域名空间,函数名相同,签名不同
- 编译期绑定确定绑定函数,也称为静态多态
重写:覆盖(override)
- 虚函数
- 子类空间,函数名相同,签名相同
重定义:遮蔽(redefine)
- 非虚函数,子类成员函数与父类成员函数同名
- 虚函数,子类成员函数与父类成员函数同名但不同签名
多态:(动态多态)
- 运行期确定绑定对象,也称为动态多态
- 同签名虚函数构成覆盖
- 父类指针指向子类对象,调用属于子类的函数
- 顶层函数重载操作符
- 非对象操作数可以出现在操作符左边
- 使用类成员函数重载是,第一操作数必须是累的对象
- 顶层函数不能直接访问类私有成员,最好将顶层重载函数设为友元函数,方便直接访问私有数据成员
- 重载[]: 重载为成员函数,检查下标 , 返回一个引用适应左值情况
- 重载(): 函数调用重载操作符
- 析构函数出现,必须定义拷贝构造,赋值构造函数
- 继承下的构造函数:
- 先父类按继承顺序构造,再成员按顺序构造,最后派生类构造
- 每一层只负责调用父类构造函数
- 基类没有默认构造时,子类构造函数必须显式调用基类的某个构造函数
- 创建派生类对象时,自动调用基类默认构造函数
- 子类有构造函数,基类没有默认构造,创建子类对象时,自动创建基类默认构造函数
- 子类没有构造函数,基类有默认构造,创建子类对象时,自动调用基类默认构造
- 子类有构造函数,基类也有默认构造,创建子类对象时,直接调用基类默认构造,或者调用子类显式调用的构造函数
- 子类基类均有构造,但是基类没有默认构造,创建子类对象时,必须显式调用基类构造函数
- 继承下的析构函数: 定义实现对派生类新增成员的析构释放
- 虚基类构造优先于非虚基类的构造
- 虚基类构造由最派生类调用,其他派生类跳过对虚基类构造的调用
- 派生类对象和指针可适用于任何基类对象或指针使用的位置(子类可以向上转型)
- 赋值兼容:子类对象可以赋值或者初始化父类对象,基类指针可以指向子类对象地址